#ifndef __BTREE_H__
#define __BTREE_H__

/**
 * 二叉树节点的定义
 */
typedef struct btreenode {
    int data;
    struct btreenode* left;
    struct btreenode* right;
} btreenode;

/**
 * 二叉树
 */
typedef struct btree {
    btreenode* root;
} btree;

/**
 * 二叉树的先序遍历
 * @param bt 二叉树指针
 * @param callback 回调函数
 */
void pre_order_visit(btree* bt, void (*callback) (int));

/**
 * 二叉树的中序遍历
 * @param bt 二叉树指针
 * @param callback 回调函数
 */
void in_order_visit(btree* bt, void (*callback) (int));

/**
 * 二叉树的后序遍历
 * @param bt 二叉树指针
 * @param callback 回调函数
 */
void post_order_visit(btree* bt, void (*callback) (int));

/**
 * 二叉树的层序遍历
 * @param bt 二叉树指针
 * @param callback 回调函数
 */
void level_visit(btree* bt, void (*callback) (int));

#endif